package models

import (
	"github.com/asdine/storm"
	"github.com/asdine/storm/q"
	"github.com/clakeboy/golib/ckdb"
	"urs_service/common"
)

type UserData struct {
	Id             int    `storm:"id,increment" json:"id"` //主键,自增长
	Number         string `json:"number"`                  //序号
	Name           string `json:"name"`                    //姓名
	Phone          string `json:"phone"`                   //电话
	Gender         string `json:"gender"`                  //性别
	MineCar        string `json:"mine_car"`                //意向车型
	ReceiveAddress string `json:"receive_address"`         //领取地址
	AliAddress     string `json:"ali_address"`             //支付宝地址
	CouponInfo     string `json:"coupon_info"`             //优惠券信息
	CouponStatus   string `json:"coupon_status"`           //优惠券使用状态
	CreatedDate    int    `json:"created_date"`            //创建上传时间
}

//表名
type UserModel struct {
	Table string `json:"table"` //表名
	storm.Node
}

func NewUserModel(db *storm.DB) *UserModel {
	if db == nil {
		db = common.BDB
	}

	return &UserModel{
		Table: "user",
		Node:  db.From("user"),
	}
}

//通过ID拿到记录
func (u *UserModel) GetById(id int) (*UserData, error) {
	data := &UserData{}
	err := u.One("Id", id, data)
	if err != nil {
		return nil, err
	}

	return data, nil
}

//查询条件得到任务数据列表
func (u *UserModel) Query(page, number int, where ...q.Matcher) (*ckdb.QueryResult, error) {
	var list []UserData
	count, err := u.Select(where...).Count(new(UserData))
	if err != nil {
		return nil, err
	}
	err = u.Select(where...).Limit(number).Skip((page - 1) * number).Reverse().Find(&list)
	if err != nil {
		return nil, err
	}
	return &ckdb.QueryResult{
		List:  list,
		Count: count,
	}, nil
}

//查询条件得到任务数据列表
func (u *UserModel) List(page, number int, where ...q.Matcher) ([]UserData, error) {
	var list []UserData
	err := u.Select(where...).Limit(number).Skip((page - 1) * number).Reverse().Find(&list)
	if err != nil {
		return nil, err
	}
	return list, nil
}
